/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg300511ed1aulalabsvn;

/**
 * TAD Arvore Binaria: Uma estrutura de dado do tipo arvore
 * one o grau de cada nó é no máximo 2.
 * @author Daniel Ventura
 * @see ExcecaoAvoreVazia
 */
public interface ArvoreBinaria {
    
    /**
     * @return true se uma arvore for vazia, false caso contrário
     */
    public boolean testeVazio();
    
    /**
     * Lê o valor que esta na raiz da arvore
     * @return o valor na raiz da avore
     * @exception ExecaoArvoreVazia
     */  
    public Comparable consultaRaiz();
    
    /**
     * Obtem a sub-arvore da esquerda
     * @return a raiz da sub-arvore da esquerda
     * @exception ExecaoArvoreVazia
     */
    public ArvoreBinaria subArvEsq();
    
    /**
     * Obtem a sub-arvore da direita
     * @return a raiz da sub-arvore da direita
     * @exception ExceaoArvoreVazia
     */
    public ArvoreBinaria subArvDir();
    
    /**
     * Atribui o valor passado como parametro para a raiz da arvore
     */
    public void atribuiRaiz(Comparable valor);
    
    /**
     * Atribui uma sub-arvore a esquerda
     * @exception ExcecaoArvoreVazia
     */
    public void atribuiSubArvE(ArvoreBinaria A);
    
    /**
     * Atribui uma sub-arvore a direita
     * @exception ExcecaoArvoreVazia
     */
    public void atribuiSubArvD(ArvoreBinaria A);
    
    /**
     * Atribui um filho a esquerda
     * @exception ExcecaoArvoreVazia
     */
    public void atribuiFilho(noAB e);
    
    /**
     * Atribui um filho a direita
     * @exception ExcecaoArvoreVazia
     */
    public void atribuiFilhoD(noAB d);
    
    /**
     * Retorna o no da arvore que e pai do no q passado como
     * parametro e retorna null caso q nao ocorra na arvore
     */
    public noAB(noAB q);
}
